﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AgileSaude.Entities;
using AgileSaude.Business;
using FBS.Framework;

namespace AgileSaude.Web.Admin
{
    public partial class UsuarioEdit : PageBase
    {
        #region Properties
        public int IdUsuario
        {
            get { return ViewState["IdUsuario"] == null ? int.MinValue : Convert.ToInt32(ViewState["IdUsuario"]); }
            set { ViewState["IdUsuario"] = value; }
        }

        public UsuarioEntities usuario
        {
            get { return (UsuarioEntities)ViewState["usuario"]; }
            set { ViewState["usuario"] = value; }
        }

        UsuarioFacade usuarioFacade = new UsuarioFacade();

        public List<UsuarioEntities> ListaUser
        {
            get { return ViewState["ListaUser"] == null ? new List<UsuarioEntities>() : (List<UsuarioEntities>)ViewState["ListaUser"]; }
            set { ViewState["ListaUser"] = value; }
        }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Resultado resultado = new Resultado();

                CidadeEntities FiltroCidade = new CidadeEntities();

                //ddlCidade.DataTextField = "Nome";
                //ddlCidade.DataValueField = "IdCidade";

                //ddlCidade.DataSource = new CidadeFacade().Listar(FiltroCidade, ref resultado).OrderBy(x => x.Nome);
                //ddlCidade.DataBind();

                PerfilEntities Filtro = new PerfilEntities();

                ddlPerfil.DataTextField = "Descricao";
                ddlPerfil.DataValueField = "IdPerfil";

                ddlPerfil.DataSource = new PerfilFacade().Listar(ref resultado).OrderBy(x => x.Descricao);
                ddlPerfil.DataBind();

                ddlPerfil.Items.Insert(0, "");

                ddlMedico.Visible = false;
                lblMedico.Visible = false;

                if (Context.Handler is ListaUsuarios)
                {
                    int IdUsuario = ((ListaUsuarios)Context.Handler).IdUsuario;

                    if (IdUsuario > 0)
                    {
                        usuario = usuarioFacade.GetUsuario(IdUsuario);

                        if (usuario != null)
                        {
                            hdfIdUsuario.Value = usuario.idUsuario.ToString();
                            if (usuario.CPF.Length == 14)
                                rbtPFPJ.SelectedValue = "Pessoa Jurídica";

                            txtCPF.Text = usuario.CPF;
                            txtNome.Text = usuario.Nome;
                            txtEmail.Text = usuario.Email;
                            txtEndereco.Text = usuario.Endereco;
                            txtBairro.Text = usuario.Bairro;
                            //ddlCidade.SelectedValue = usuario.idCidade.ToString();
                            txtCidade.Text = usuario.Cidade;
                            txtCEP.Text = usuario.CEP;
                            ddlPerfil.SelectedValue = usuario.idPerfil.ToString();

                            ddlPerfil_SelectedIndexChanged(null, null);

                            if (usuario.idMedico == null)
                                ddlMedico.SelectedValue = "0";
                            else
                                ddlMedico.SelectedValue = usuario.idMedico.ToString();

                            txtTelResidencial.Text = usuario.TelResidencial;
                            txtDDDResidencial.Text = usuario.DDDResidencial;
                            txtTelComercial.Text = usuario.TelComercial;
                            txtDDDComercial.Text = usuario.DDDComercial;
                            txtTelCelular.Text = usuario.TelCelular;
                            txtDDDCelular.Text = usuario.DDDCelular;
                            if (usuario.DataNasc.HasValue)
                                txtDtNasc.Text = usuario.DataNasc.Value.ToString("dd/MM/yyyy");
                            txtRG.Text = usuario.RG;
                            txtProfissao.Text = usuario.Proissao;
                            txtUF.Text = usuario.UF;
                            txtNumero.Text = usuario.Numero;
                            txtComplemento.Text = usuario.Complemento;
                            ddlRecolhimentoISS.SelectedValue = usuario.RecolhimentoISS;
                            txtCNAE.Text = usuario.CNAE;
                            txtIE.Text = usuario.IE;
                            txtIM.Text = usuario.IM;
                        }
                    }
                    
                    if (((ListaUsuarios)Context.Handler).ReadOnly)
                        btnSalvar.Visible = false;
                }
            }
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Admin/ListaUsuarios.aspx", false);
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            Resultado resultado = new Resultado();
            string msgConfirmacao = string.Empty;

            if (Page.IsValid)
            {
                try
                {
                    if (usuario == null || usuario.idUsuario == 0)
                    {
                        usuario = new UsuarioEntities();
                        //Gerar senha
                        string senha = usuarioFacade.CreatePassword(6);
                        //Enviar senha por email
                        usuario.Senha = new Criptografia("12345").Codificar(senha);
                        usuario.DataInclusao = DateTime.Now;
                    }

                    usuario.CPF = txtCPF.Text.Replace(".", "").Replace("-", "").Replace("/", "");
                    usuario.Nome = txtNome.Text;
                    usuario.Email = txtEmail.Text;
                    usuario.Endereco = txtEndereco.Text;
                    usuario.Bairro = txtBairro.Text;
                    //usuario.idCidade = int.Parse(ddlCidade.SelectedValue);
                    usuario.Cidade = txtCidade.Text;
                    usuario.CEP = txtCEP.Text;
                    usuario.idPerfil = int.Parse(ddlPerfil.SelectedValue);
                    if (ddlMedico.SelectedValue != "")
                        usuario.idMedico = int.Parse(ddlMedico.SelectedValue);
                    else
                        usuario.idMedico = null;

                    usuario.Ativo = true;

                    usuario.TelResidencial = txtTelResidencial.Text;
                    usuario.DDDResidencial = txtDDDResidencial.Text.Replace("(", "").Replace(")", "");
                    usuario.TelComercial = txtTelComercial.Text;
                    usuario.DDDComercial = txtDDDComercial.Text.Replace("(", "").Replace(")", "");
                    usuario.TelCelular = txtTelCelular.Text;
                    usuario.DDDCelular = txtDDDCelular.Text.Replace("(", "").Replace(")", "");
                    
                    DateTime dt;
                    if(DateTime.TryParse(txtDtNasc.Text, out dt))
                        usuario.DataNasc = dt;

                    usuario.RG = txtRG.Text;
                    usuario.Proissao = txtProfissao.Text;
                    usuario.UF = txtUF.Text;
                    usuario.Numero = txtNumero.Text;
                    usuario.Complemento = txtComplemento.Text;

                    usuario.RecolhimentoISS = ddlRecolhimentoISS.SelectedValue;
                    usuario.CNAE = txtCNAE.Text;
                    usuario.IE = txtIE.Text;
                    usuario.IM = txtIM.Text;

                    if (usuario.idUsuario > 0)
                    {
                        //Alterar
                        resultado = usuarioFacade.Alterar(usuario);
                    }
                    else
                    {
                        //Incluir
                        resultado = usuarioFacade.Incluir(usuario);
                        
                    }

                }
                catch (Exception ex)
                {
                    new ResultadoFacade().GravaLog(ref resultado, ex.Message, "AgileSaude", "", "btnSalvar_Click", "UsuarioEdit.aspx");
                }

                if (resultado.Sucesso)
                {
                    Response.Redirect("~/Admin/ListaUsuarios.aspx", false);
                }
                else
                {
                    ((Label)Master.FindControl("lblMensagem")).Text = resultado.Mensagens[0].Descricoes[0];
                    ((Label)Master.FindControl("lblMensagem")).CssClass = "failureNotification";
                    ((Label)Master.FindControl("lblMensagem")).Visible = true;
                }
            }

        }

        protected void ddlPerfil_SelectedIndexChanged(object sender, EventArgs e)
        {
            Resultado resultado = new Resultado();

            if (ddlPerfil.SelectedItem.Text == "Médico")
            {
                ddlMedico.Visible = true;
                lblMedico.Visible = true;
                ddlMedico.DataTextField = "Nome";
                ddlMedico.DataValueField = "IdMedico";

                ddlMedico.DataSource = new MedicoFacade().Listar(new MedicoEntities(), ref resultado).OrderBy(x => x.Nome);
                ddlMedico.DataBind();

                ddlMedico.Items.Insert(0, "");
            }
            else
            {
                ddlMedico.Visible = false;
                lblMedico.Visible = false;
            }
        }

    }
}